#include "../games/globale.h" // Fonction et Headers globaux

#include "../multimedia/cls_primitive_texte.h" // Classe de Texte (Affichage Texte...)

/* ----------------------------------------------------
			Constructeur
  ----------------------------------------------------- */
cls_PrimitiveTexte::cls_PrimitiveTexte()
{
    debugTrace("Constructeur cls_PrimitiveTexte");

    this->p_ttfP_Police = NULL;
    //this->couleurNoire = {255, 255, 255};
    this->sdlC_couleur.r = 255;
    this->sdlC_couleur.g = 255;
    this->sdlC_couleur.b = 255;

    this->p_sdlS_Texte = NULL;

}

/* ----------------------------------------------------
			Destructeur
  ----------------------------------------------------- */
cls_PrimitiveTexte::~cls_PrimitiveTexte()
{
    debugTrace("Destructeur cls_PrimitiveTexte");
}


/* ----------------------------------------------------
			Fonction qui permet d'initialise une police
  ----------------------------------------------------- */
void cls_PrimitiveTexte::fct_InitFont(const char * fontPath)
{

    debugTrace("Initialisation de la Font");

    //TTF_Init();

    // Chargement de la police
    this->p_ttfP_Police = TTF_OpenFont(fontPath, 24);


}

/* ----------------------------------------------------------
			Fonction qui permet de définir un texte
			Dans une surface
  ----------------------------------------------------------- */
void cls_PrimitiveTexte::fct_DefineTexte(const char *stValue, int n_HideTime)
{

    // Ecriture du texte dans la SDL_Surface "this->p_sdlS_Texte" en mode Blended (optimal)
    this->p_sdlS_Texte = TTF_RenderUTF8_Blended(this->p_ttfP_Police, stValue, this->sdlC_couleur);

    this->n_HideTime = n_HideTime;

}

/* ----------------------------------------------------------
			Fonction qui permet d'afficher un texte à l'écran
  ----------------------------------------------------------- */
void cls_PrimitiveTexte::fct_DrawTexte(SDL_Surface *p_sdlS_Ecran, int n_CurrentTime, int posX, int posY)
{

    // Si on a dépassé la "date" de mise à jour du sprite, on passe à l'étape suivante de l'animation
    if(n_CurrentTime < this->n_HideTime && this->p_sdlS_Texte != NULL)
    {
        SDL_Rect sdlR_Position;

        sdlR_Position.x = posX;
        sdlR_Position.y = posY;
        SDL_BlitSurface(this->p_sdlS_Texte, NULL, p_sdlS_Ecran, &sdlR_Position); // Blit du texte par-dessus

    }
    else
    {
        this->p_sdlS_Texte = NULL;
    }

}


/* ----------------------------------------------------
			On libere les surfaces
  ----------------------------------------------------- */
void cls_PrimitiveTexte::fct_FreeSurface()
{

    TTF_CloseFont(this->p_ttfP_Police); /* Fermeture de la police avant TTF_Quit */
    SDL_FreeSurface(this->p_sdlS_Texte);
    //free(this->p_sdlS_Texte);
    //TTF_Quit();
}
